package cn.wolfcode.trip.api.controller;


import cn.wolfcode.trip.base.domain.Question;
import cn.wolfcode.trip.base.domain.QuestionCollection;
import cn.wolfcode.trip.base.domain.QuestionFollow;
import cn.wolfcode.trip.base.domain.QuestionReply;
import cn.wolfcode.trip.base.query.QueryObject;
import cn.wolfcode.trip.base.service.IQuestionCollectionService;
import cn.wolfcode.trip.base.service.IQuestionFollowService;
import cn.wolfcode.trip.base.service.IQuestionReplyService;
import cn.wolfcode.trip.base.service.IQuestionService;
import cn.wolfcode.trip.base.util.JsonResult;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;


@RestController
@RequestMapping("/questions")
public class QuestionController {
    @Autowired
    private IQuestionService questionService;

    @Autowired
    private IQuestionReplyService questionReplyService;

    @Autowired
    private IQuestionFollowService questionFollowService;

    @Autowired
    private IQuestionCollectionService questionCollectionService;

    /**
     * 获取提问的问题列表
     * 请求路径  /questions
     * 请求方式  get
     * 请求参数  QueryObject
     * 返回结果  PageInfo
     */
    @GetMapping
    public PageInfo<Question> query(QueryObject qo) {
        return questionService.query(qo);
    }


    /**
     * 保存提问的问题
     * 请求路径  /questions
     * 请求方式  post
     * 请求参数  Question
     * 返回结果  JsonResult
     */
    @PostMapping
    public JsonResult saveOrUpdate(Question question) {
        questionService.saveOrUpdate(question);
        return new JsonResult();
    }

    /**
     * 根据问题id查询对应的问题
     * 请求路径  /questions/{id}
     * 请求方式  get
     * 请求参数  Long id
     * 返回结果  Question
     */

    @GetMapping("/{id}")
    public Question getById(@PathVariable Long id) {
        return questionService.getById(id);
    }


    /**
     * 根据问题id查询问题对应的回答列表
     * 请求路径  /questions/{id}/questionReplies
     * 请求方式  get
     * 请求参数  Long id,QueryObject
     * 返回结果  QuestionReply
     */
    @GetMapping("/{id}/questionReplies")
    public PageInfo<QuestionReply> listById(@PathVariable Long id, QueryObject qo) {
        return questionReplyService.listById(id, qo);
    }


    /**
     * 保存问题对应的回答
     * 请求路径  /questions/{questionId}/questionReplies
     * 请求方式  post
     * 请求参数  QuestionReply
     * 返回结果  JsonResult
     */
    @PostMapping("/{questionId}/questionReplies")
    public JsonResult saveOrUpdate(QuestionReply qr) {
        JsonResult jsonResult = new JsonResult();
        try {
            questionReplyService.saveOrUpdate(qr);
        } catch (Exception e) {
            e.printStackTrace();
            jsonResult.mark(e.getMessage());
        }
        return jsonResult;
    }

    /**
     * 保存关注的问题
     * 请求路径  /questions/{questionId}/questionFollows
     * 请求方式  post
     * 请求参数  QuestionFollow
     * 返回结果  JsonResult
     */
    @PostMapping("/{questionId}/questionFollows")
    public JsonResult saveOrUpdate(QuestionFollow qf) {
        questionFollowService.saveOrUpdate(qf);
        return new JsonResult();
    }

    /**
     * 移除关注的问题
     * 请求路径  /questions/{questionId}/questionFollows
     * 请求方式  delete
     * 请求参数  Long questionId
     * 返回结果  JsonResult
     */
    @DeleteMapping("/{questionId}/questionFollows")
    public JsonResult deleteQuestionFollowById(@PathVariable Long questionId) {
        questionFollowService.deleteQuestionFollowById(questionId);
        return new JsonResult();
    }

    /**
     * 查询当前用户关注的问题
     * 请求路径  /questions/{questionId}/questionFollows
     * 请求方式  get
     * 请求参数  Long questionId
     * 返回结果  JsonResult
     */
    @GetMapping("/{questionId}/questionFollows")
    public JsonResult queryFollowById(@PathVariable Long questionId) {
        JsonResult jsonResult = new JsonResult();
        try {
            questionFollowService.queryFollowById(questionId);
            return jsonResult;
        } catch (Exception e) {
            e.printStackTrace();
            jsonResult.mark(e.getMessage());
        }
        return jsonResult;
    }

    /**
     * 保存收藏的问题
     * 请求路径  /questions/{questionId}/questionCollections
     * 请求方式  post
     * 请求参数  QuestionCollection
     * 返回结果  JsonResult
     */
    @PostMapping("/{questionId}/questionCollections")
    public JsonResult saveOrUpdate(QuestionCollection qc) {
        questionCollectionService.saveOrUpdate(qc);
        return new JsonResult();
    }

    /**
     * 移除收藏的问题
     * 请求路径  /questions/{questionId}/questionCollections
     * 请求方式  delete
     * 请求参数  Long questionId
     * 返回结果  JsonResult
     */
    @DeleteMapping("/{questionId}/questionCollections")
    public JsonResult deleteQuestionCollectionById(@PathVariable Long questionId) {
        questionCollectionService.deleteQuestionCollectionById(questionId);
        return new JsonResult();
    }

    /**
     * 查询当前用户收藏的问题
     * 请求路径  /questions/{questionId}/questionCollections
     * 请求方式  get
     * 请求参数  Long questionId
     * 返回结果  JsonResult
     */
    @GetMapping("/{questionId}/questionCollections")
    public JsonResult queryById(@PathVariable Long questionId) {
        JsonResult jsonResult = new JsonResult();
        try {
            questionCollectionService.queryById(questionId);
            return jsonResult;
        } catch (Exception e) {
            e.printStackTrace();
            jsonResult.mark(e.getMessage());
        }
        return jsonResult;
    }
}
